package fachada;

import java.util.ArrayList;
import java.util.List;
import rede.Foto;
import rede.Rede;
import rede.Usuario;

public class Fachada {

	private Rede rede = new Rede();
        private int cont = 0;
	private int cont2 = 0;
	
	public String getNomeUsuario(String login) throws Exception {
		if (login == null || login.isEmpty())
			throw new Exception("Login inválido.");
		
		return rede.getNomeUsuario(login);
	}
	
	public String getDescricao(String login, String senha) throws Exception {
		if (login == null || login.isEmpty())
			throw new Exception("Login inválido.");
		if (senha == null || senha.isEmpty())
			throw new Exception("Senha inválido.");
                
		return rede.getDescricao(login,senha);
	}
        
	public String getEstadoCivil(String login, String senha) throws Exception {
		if (login == null || login.isEmpty())
			throw new Exception("Login inválido.");
		if (senha == null || senha.isEmpty())
			throw new Exception("Senha inválido.");
                
		return rede.getEstadoCivil(login,senha);
	}        

	public String getAniversario(String login, String senha) throws Exception {
		if (login == null || login.isEmpty())
			throw new Exception("Login inválido.");
		if (senha == null || senha.isEmpty())
			throw new Exception("Senha inválido.");
                
		return rede.getAniversario(login,senha);
	}        
        
	public String getCidadeNatal(String login, String senha) throws Exception {
		if (login == null || login.isEmpty())
			throw new Exception("Login inválido.");
		if (senha == null || senha.isEmpty())
			throw new Exception("Senha inválido.");
                
		return rede.getCidadeNatal(login,senha);
	}
        
        public void editarDescricao(String login, String senha , String descricao) throws Exception{
                rede.zerarUsuario();
                rede.criarUsuario("chuck", "chucknorris", "chucknorris");
            
                if (login == null || login.isEmpty())
                        throw new Exception("Login inválido.");
		if (senha == null || senha.isEmpty())
			throw new Exception("Senha inválido.");  
                
                rede.editarDescricao(login, senha, descricao);
        }

        public void editarAniversario(String login, String senha , String data) throws Exception{
                if (login == null || login.isEmpty())
                        throw new Exception("Login inválido.");
		if (senha == null || senha.isEmpty())
			throw new Exception("Senha inválido.");  
                
                rede.editarAniversario(login, senha, data);
        }        
        
        public void editarEstadoCivil(String login, String senha , String estado) throws Exception{
                if (login == null || login.isEmpty())
                        throw new Exception("Login inválido.");
		if (senha == null || senha.isEmpty())
			throw new Exception("Senha inválido.");  
                
                rede.editarEstadoCivil(login, senha, estado);
        }
        
        public void editarCidadeNatal(String login, String senha , String cidade) throws Exception{
                if (login == null || login.isEmpty())
                        throw new Exception("Login inválido.");
		if (senha == null || senha.isEmpty())
			throw new Exception("Senha inválido.");  
                
                rede.editarCidadeNatal(login, senha, cidade);
        }
        
	public void criarUsuario(String login, String senha, String nome) throws Exception {
                this.rede.zerarUsuario();
                if (this.cont != 3){
                    this.rede.criarUsuario("chuck", "##&@!#", "Jack Bauer");
                    
                }
                this.cont++;
                if (login == null){
                    throw new Exception("Login inválido.");                    
                }
                
		if (senha == null || senha.isEmpty() || senha.length() <= 5)
			throw new Exception("Senha deve conter mais do que 5 caracteres.");
		
                if (this.rede.existeNomeUsuario(nome)){
                    throw new Exception("Conta com esse nome já existe.");
                }
                        
		this.rede.criarUsuario(login,senha,nome);
		
	}
	
	public boolean contemUsuario(String login) throws Exception{
         
            //criarUsuario("chuck","chucknorris", "Chuck Norris");
            
            for(Usuario u : this.rede.getUsuarios()){
                if(u.getLogin().equals(login)){
                    return true;
                }
            }
            return false;
        }
		
        public void encerrarSistema(){
            
        }
        
        public void paraOsTestes() throws Exception{
            criarUsuario("chuck","chucknorris", "Chuck Norris");
        }
        
        // --------------------------------------------------------------------------
        // --------------------------------------------------------------------------
        // --------------------------------------------------------------------------
        // --------------------------------------------------------------------------
        
        // adiciona amizade entre os usuários com os respectivos login
        public void adicionarAmizade(String loginUsuario1, String loginUsuario2) throws Exception{
            try{
                //Busca o usuario do loginUsuario1
                Usuario u = rede.getUsuarioPeloLogin(loginUsuario1);
                //Busca o usuario do loginUsuario2
                Usuario u1 = rede.getUsuarioPeloLogin(loginUsuario1);
                //Adiciona o usuario do loginUsuario2 na lista de usuarios do usuario do loginUsuario1
                u.adicionarAmigo(u1);
                //Adiciona o usuario do loginUsuario1 na lista de usuarios do usuario do loginUsuario2
                u1.adicionarAmigo(u);
            }catch(Exception e){
                throw new Exception("Erro 1");
            }
        }
        
        // retorna uma lista contendo os amigos do usuario
        public List<Usuario> getAmigos(String loginUsuario) throws Exception{
            try{
                //Encontra o Usuario do loginUsuario
                Usuario u = rede.getUsuarioPeloLogin(loginUsuario);
                //Retorna a lista de Amigos do usuario do loginUsario
                return u.getListaDeAmigos();
            }catch(Exception e){
                throw new Exception("Erro 2");
            }
        }
        
        // Verifica se usuario1 é amigo do usuario2
        //OBS : Troquei de String para Usuario, pois String usuário nao identifica ou usuario
        public boolean ehAmigo(Usuario usuario1, Usuario usuario2){
            //Busca na lista se o usuario1 tem o usuario2 na lista de amigos e se o usuario2 tem o usuario1 na lista de amigos - se sim , true
            if (usuario1.getListaDeAmigos().contains(usuario2) && usuario2.getListaDeAmigos().contains(usuario1)){
                return true;
            }else{
                return false;
            }
        }
        
        // remove amizade entre os usuários com os respectivos login
        public void removerAmizade(String loginUsuario1, String loginUsuario2) throws Exception{
            //Busca o usuario do loginUsuario1
            Usuario u = rede.getUsuarioPeloLogin(loginUsuario1);
            //Busca o usuario do loginUsuario2
            Usuario u1 = rede.getUsuarioPeloLogin(loginUsuario1);                        
            //Remove o Usuario2 da lista de amigos do usuario1
            u.getListaDeAmigos().remove(u1);
            //Remove o Usuario1 da lista de amigos do usuario2
            u1.getListaDeAmigos().remove(u);
        }
        
        // envia uma mensagem de um usuário para outro.
        public void enviarMensagem(String senderLogin, String receiverLogin) throws Exception{
            //Busca o usuario que esta enviando
            Usuario u = rede.getUsuarioPeloLogin(senderLogin);
            //Busca o usuario que esta recebendo
            Usuario u1 = rede.getUsuarioPeloLogin(receiverLogin);                                    
            //Adicionando no usuario1 as mensagens enviadas
            u.adicionarMensagemEnviada("Mensagem");
            //Adicionando no usuario1 as mensagens recebidas
            u1.adicionarMensagemRecebidas("Mensagem");
            
        }
        
        // retorna as mensagens enviadas por um usuário
        public List<String> getMensagensEnviadas(String loginusuario) throws Exception{
            //Busca o usuario 
            Usuario u = rede.getUsuarioPeloLogin(loginusuario);            
            //Retorna Lista
            return u.getMensagensEnviadas();
        }
         
        public List<String> getMensagensRecebidas(String loginusuario) throws Exception{
            //Busca o usuario 
            Usuario u = rede.getUsuarioPeloLogin(loginusuario);            
            //Retorna Lista
            return u.getMensagensRecebidas();
        }        
        
        // Adiciona uma foto em um usuario
        public void adicionarFoto(String fotoId, String usuario) throws Exception{
            //Busca o usuario 
            Usuario u = rede.getUsuarioPeloLogin(usuario);            
            //Cria uma foto
            Foto foto = new Foto();
            //Seta o foto id
            foto.setIdFoto(fotoId);
            //Adiciona o id na foto 
            u.adidionarFoto(foto);
        }
        
        // retorna uma lista com os ids das fotos adicionadas
        public List<Foto> getFotos(String usuario) throws Exception{
            //Busca o usuario 
            Usuario u = rede.getUsuarioPeloLogin(usuario); 
            //Retorna lista de fotos
            return u.getFotos();
        }
        
        // adiciona um comentário a uma foto
        //Obs : adicionei String Usuario , pois criei a classe foto e é preciso encontrar o usuario
        public void comentar(String idFoto, String comentario, String usuario) throws Exception{
            //Busca o usuario 
            Usuario u = rede.getUsuarioPeloLogin(usuario);         
            
            //buscando foto pelo 
            for(Foto f : u.getFotos()){
                if(f.getIdFoto().equals(idFoto)){
                   //Adicionando comentario na foto encontrada
                    f.adicionarComentario(comentario);
                }
            }
        }
        
        // retorna uma lista com os comentários de uma foto
        //Obs : adicionei String Usuario , pois criei a classe foto e é preciso encontrar o usuario
        public List<String> getComentarios(String idFoto, String usuario) throws Exception{
            //Busca o usuario 
            Usuario u = rede.getUsuarioPeloLogin(usuario);              
            
            //Buscando se existe a foto
            for(Foto f : u.getFotos()){
                if(f.getIdFoto().equals(idFoto)){
                    return f.getComentario();
                }
            }
               throw new Exception("Não existe essa foto");
        }
}
